// 数字类型
let num:number=0
console.log(typeof num);

// 字符串类型
let str:string='hhb'

// 布尔类型
let bl:boolean=true

// 任意类型 存啥都行
let a:any="d"

// 未知类型 现在不确定类型是什么就用
let un:unknown
    un=0   // 就是number
// console.log(typeof un); 就是number

// never不能有任何值  
let n:never


// 返回值为空的函数只能返回undefined
function fun():void{
    console.log("返回值为空",undefined); 
}



// 声明对象类型
// 这里设置了这个对象里面的属性值类型 后面加[key:string]:any 就可以无限添加
let person:{name:string,age:number,[key:string]:any,phon?:number}
// 所以这里面必须要有name，age且类型也要一样,而属性名后面加？就是可选
person={
    name:'hhb',
    age:29,
    sex:'',
    city:1
}



// 声明箭头函数类型
// 下面意思是你要声明一个函数函数形参和返回值都要是number
let count:(a:number,b:number)=>number
 count=(a,b)=>{        
    return a+b
}


// 两个都是声明一个字符串类型数组
let arr:string[]
let arrs:Array<string>  //泛型Array<string>
// 也可以声明别的类型  如: let arr1:number[]
arr=['1','2']



// 元组
// 意思是这个数组只能写三属性，三个属性的类型分别是string,number,boolean
let arr3:[string,number,boolean]
arr3=['1',1,true]



// 常量枚举类型
// 如果不主动赋值 那枚举就是从0开始也就是第一个是0
enum dataEnum{
    up,         //0
    down,       //1
    left,       //2
    right       //3
}
/**  
    如果给up=3那就是从3开始
    enum dataEnum1{
        up=3,       //3
        down,       //4
        left,       //5
        right       //6
    }
*/
// 也可以赋值字符串枚举
enum dataEnum2{
    up='1',       
    down='2',       
    left='3',       
    right='4'       
}



// 联合类型
// 限制只能是number|string
type Status=number|string
let st1:Status= 2
let st2:Status= "2"

// 限制只能是男或者女
type sex='男'|'女'
let sexs:sex="男"

type ars={
    h:number,
    w:number
}
type arss={
    house:string,
    city:string,
    arr:[] //任意类型数组
}
// asss这个类型必须包括 ars & arss
type asss=ars & arss




